from django.contrib.auth.hashers import check_password

from users.models import User


class PhoneBackend:
    def authenticate(self, request, username=None, password=None):
        try:
            # 通过前端传递的用户名变量，获取用户对象，用户名变量为手机号，所以需要获取字段名为phone的值
            user_obj = User.objects.get(phone=password)
            # 获取不到时，会抛出异常，所以需要异常处理
        except User.DoesNotExist:
            # 异常处理结果返回为None
            return None
        else:
            # 判断用户和密码同时正确
            if user_obj and check_password(password, user_obj.password):
                # 返回用户对象
                return user_obj
            else:
                return None
